#include <mysql/mysql.h>
#include <stdio.h>
#include <string.h>

// 链接数据库
MYSQL *connectMysql(MYSQL *mysql);

/*
函数功能：注册函数
参数：id： 用户id 由5位数字组成 eg：24001
    password：用户密码由字母和数字组成
返回值：成功1，失败0
*/
int addUser(MYSQL *mysql);

/*
函数功能：登录函数
参数：id： 用户id 由5位数字组成 eg：24001
    password：用户密码由字母和数字组成
返回值：成功1，失败0
*/
int userLongin(MYSQL *mysql);

int main()
{
    int num = 1;
    int flg = 0;
    MYSQL *mysql;
    mysql = connectMysql(mysql); // 链接数据库
    printf("----------------------------------\n");
    printf("-----------1、用户注册------------\n");
    printf("-----------2、用户登录------------\n");
    printf("-----------0、退出系统------------\n");
    printf("----------------------------------\n");
    printf("请选择：");
    while (num) // 循环选择
    {
        scanf("%d", &num);
        switch (num)
        {
        case 0:
            mysql_close(mysql); // 退出释放
            break;
        case 1:
            flg = addUser(mysql); // 注册
            if (flg)
            {
                printf("注册成功！\n");
                printf("请前往登录！\n");
                printf("请选择：");
            }
            else
            {
                printf("注册失败！\n");
                printf("请重新选择：");
            }
            break;
        case 2:
            flg = userLongin(mysql); // 登录
            if (flg)
            {
                printf("登录成功！\n");
                printf("继续选择：\n");
            }
            else
            {
                printf("登录失败！\n");
                printf("请重新选择：");
            }
            break;
        default:
            printf("没有这个选项！\n");
            printf("请重新选择：");
            break;
        }
    }
    return 0;
}

// 链接数据库
MYSQL *connectMysql(MYSQL *mysql)
{
    mysql = mysql_init(mysql);
    mysql = mysql_real_connect(mysql, "localhost", "root", "123", "Taobao", 0, NULL, 0);
    return mysql;
}

// 注册函数
int addUser(MYSQL *mysql)
{
    printf("\t--++--注册界面--++--\n\n");
    char id[20] = {0};
    char pw[20] = {0};
    printf("用户名格式：[24001]\n");
    printf("请输入用户名：");
    scanf("%s", id);
    printf("请输入密码：");
    scanf("%s", pw);

    MYSQL_RES *res;
    MYSQL_ROW row;
    mysql_query(mysql, "SET NAMES utf8");                 // 设置中文字符集
    char *query = "insert into user values('%s', '%s');"; // 插入语句
    char str[100];
    sprintf(str, query, id, pw);

    res = mysql_use_result(mysql);               // 查询结果
    /*while ((row = mysql_fetch_row(res)) != NULL) // 控制行
    {
        for (int j = 0; j < mysql_num_fields(res); j++) // 列
        {
            if (!strcmp(row[j], id)) // 比较用户名是否存在
            {
                printf("用户名已存在！\n");
                return 0;
            }
        }
        printf("\n");
    }*/
    // 插入数据
    mysql_real_query(mysql, str, (unsigned int)strlen(query));
    if (mysql_real_query(mysql, str, (unsigned int)strlen(query)) != 0)
    {
        printf("error making query %s", mysql_error(mysql));
    }
    // 释放存储
    mysql_free_result(res);
    return 1;
}

// 登录函数
int userLongin(MYSQL *mysql)
{
    printf("\t--++--登录界面--++--\n\n");
    char id[20] = {0};
    char pw[20] = {0};
    printf("请输入用户名：");
    scanf("%s", id);
    printf("请输入密码：");
    scanf("%s", pw);

    MYSQL_RES *res;
    MYSQL_ROW row;
    mysql_query(mysql, "SET NAMES utf8"); // 设置中文字符集
    char *query = "select * from user";   // 查看用户语句

    if (mysql_real_query(mysql, query, (unsigned int)strlen(query)) != 0)
    {
        printf("error making query %s", mysql_error(mysql));
    }

    res = mysql_use_result(mysql);               // 查询结果
    while ((row = mysql_fetch_row(res)) != NULL) // 行
    {
        for (int j = 0; j < mysql_num_fields(res); j++) // 列
        {
            if ((!strcmp(row[j], id)) && (!strcmp(row[j + 1], pw))) // 比较用户名和密码是否一致
            {
                return 1;
            }
        }
    }
    // 释放储存
    mysql_free_result(res);
    return 0;
}